
#include <stdio.h>
int main()
{
  int n, m;
  scanf("%d %d", &n, &m);
  int arr[n];
  int increase[m];

  for (int i = 0; i < n; i++)
  {
    scanf("%d", &arr[i]);
  }

  for (int i = 0; i < m; i++)
  {
    scanf("%d", &increase[i]);
  }

  for (int k = 0; k < m; k++)
  {
    int gap = increase[k];
    for (int i = gap; i < n; i++)
    {
      int tmp = arr[i]; // tmp存放i下标的值
      int j = i - gap;  // j下标为i-gap个位置
      // j每次-gap个位置
      for (; j >= 0; j -= gap)
      {
        if (arr[j] > tmp)
        {
          // j下标的值大，将j下标的值放到j变量加上一个gap的位置上
          arr[j + gap] = arr[j];
        }
        else
        {
          // j下标的值较小，j下标的值要直接放到j变量加上一个gap的位置上
          break;
        }
      }
      // 此时j下标的值是负数了，将tmp的值放到j变量加上一个gap的位置上
      arr[j + gap] = tmp;
    }
    for (int l = 0; l < n; l++)
    {
      printf("%d ", arr[l]);
    }
    printf("\n");
  }

}